package servidor.bancoServidor;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.sql.SQLException;

import javax.mail.MessagingException;

public class BancoServico extends Thread {
	private Socket socket = null;
	private PrintWriter out;
	private String inputLine;
	private BufferedReader in;
	private BancoProtocolo bancoProtocolo;

	public BancoServico(Socket socket) {
		super("BancoServicoThread");
		this.socket = socket;
		try {
			in = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			out = new PrintWriter(socket.getOutputStream(), true);
		} catch (IOException e) {
			e.printStackTrace();
		}

		bancoProtocolo = new BancoProtocolo(in, out);
	}

	public void run() {
		try {
			// mesmo tendo em sistema se é um gerente ou cliente, é necessaria
			// essa leitura, pois o processamento nesta thread é mais rapida do
			// que a mudança de informaçao na outra
			String pessoa = in.readLine();
			if (pessoa.equals("cliente")) {
				iniciaCliente();
			} else {
				iniciaGerente();
			}
			out.close();
			in.close();
			socket.close();

		} catch (IOException e) {
			System.out.println("Cliente desconectado");
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void iniciaGerente() throws IOException, SQLException,
			NumberFormatException, MessagingException {
		while ((inputLine = in.readLine()) != null) {
			// Enquanto passarem uma ação bancoProtocolo vai decidir como lidar
			// com ela
			bancoProtocolo.escolheAcao(inputLine);
		}

	}

	private void iniciaCliente() throws SQLException, IOException,
			NumberFormatException, MessagingException {
		while ((inputLine = in.readLine()) != null) {
			// Enquanto passarem uma ação bancoProtocolo vai decidir como lidar
			// com ela
			bancoProtocolo.escolheAcao(inputLine);
		}

	}
}
